package objetos.armas;

import objetos.ObjetoMovil;
import objetos.proyectiles.LaserShoot;
import org.jdom.*;

/*
 * Clase que modela el ca��n laser. Su m�todo disparar devuelve LaserShoot.
 * El poder del ca��n es un multiplicador por el que se multiplicar� el da�o
 * base de los LaserShoot disparados. No tiene munici�n, ya que tiene disparos
 * infinitos. 
 */
public class LaserCannon extends Arma {
	private boolean activo;
	/*
	 * El atributo poder es un multiplicador de la potencia del disparo para
	 * permitir la escalabilidad del arma.
	 */
	private int poder;

	public LaserCannon(ObjetoMovil origen, boolean activo) {
		super(origen, 0);
		this.setActivo(activo);
		this.setPoder(1);
	}

	@Override
	public LaserShoot disparar() {
		if (this.getActivo()) {
			return new LaserShoot(this.getBase(), this.getPoder());
		}
		return null;
	}

	@Override
	public boolean puedeDisparar() {
		return this.getActivo();
	}

	public void mejorar() {
		this.setPoder(this.getPoder() + 1);
	}

	public void setActivo(boolean activo) {
		this.activo = activo;
	}

	public boolean getActivo() {
		return activo;
	}

	public void setPoder(int poder) {
		this.poder = poder;
	}

	public int getPoder() {
		return poder;
	}

	/* Persistencia */

	/* Constructor a partir de nodoXML */
	public LaserCannon(Element nodo) {
		this(null, Boolean.valueOf(nodo.getAttributeValue("activo")));
		this.poder = Integer.parseInt(nodo.getAttributeValue("poder"));
	}

	/* NodoXML a partir de instancia */
	@Override
	public Element obtenerNodo() {
		Element nodo = new Element("laserCannon");
		nodo.setAttribute(new Attribute("activo", String.valueOf(activo)));
		nodo.setAttribute(new Attribute("poder", Integer.toString(this.poder)));
		return nodo;
	}

}
